/* 
 * HaoRan ImageFilter Classes v0.3
 * Copyright (C) 2012 Zhenjun Dai
 *
 * This library is free software; you can redistribute it and/or modify it
 * under the terms of the GNU Lesser General Public License as published by the
 * Free Software Foundation; either version 2.1 of the License, or (at your
 * option) any later version.
 *
 * This library is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License
 * for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * along with this library; if not, write to the Free Software Foundation.
 */

package com.sainti.ImageFilter;

import java.nio.Buffer;
import java.nio.ByteBuffer;
import java.nio.IntBuffer;
import java.text.SimpleDateFormat;
import java.util.Date;

import android.util.Log;


public class SoftGlowFilter implements IImageFilter{
	
	BrightContrastFilter contrastFx = new BrightContrastFilter();
    
    GaussianBlurFilter gaussianBlurFx = new GaussianBlurFilter();
    
    public SoftGlowFilter(int nSigma, float nBrightness, float nContrast){
		contrastFx.BrightnessFactor = nBrightness;
        contrastFx.ContrastFactor = nContrast; 
        gaussianBlurFx.Sigma = nSigma; 
	}
    
    //@Override
    public Image process(Image imageIn) {
    	Image clone = imageIn.clone();
		imageIn = gaussianBlurFx.process(imageIn);
        imageIn = contrastFx.process(imageIn);
         
		int old_r, old_g, old_b, r, g, b;
		for(int x = 0 ; x < (imageIn.getWidth() - 1) ; x++){
			for(int y = 0 ; y < (imageIn.getHeight() - 1) ; y++){
				   old_r = clone.getRComponent(x, y);
				   old_g = clone.getGComponent(x, y);
				   old_b = clone.getBComponent(x, y);

				   r = 255 - (255 - old_r)*(255 - imageIn.getRComponent(x, y))/255 ;
				   g = 255 - (255 - old_g)*(255 - imageIn.getGComponent(x, y))/255 ;
				   b = 255 - (255 - old_b)*(255 - imageIn.getBComponent(x, y))/255 ;
				   imageIn.setPixelColor(x, y, r, g, b);
		    }
		}
        return imageIn;
    }

}
